/*
权限校验：
    通过router路由前置钩子函数 beforeEach() ，
    在跳转路由前进行拦截判断是否已经登录，
    如果已登录，则进行路由跳转，
    如果没有则回到登录页
*/
/*
前置路由钩子函数
    to ：即将要进入的目标路由对象
    from ：当前导航正要离开的路由对象
    next : 调用该方法，进入目标路由
*/
import router from './router/index'
import loginApi from './api/login'

router.beforeEach((to, from, next) => {
  // 1, 首先获取token
  const token = localStorage.getItem('token')
  // 1.1 如果没有token
  if (!token) {
    // 这里不能直接省略成next({ path: '/login' })，要不然就出现堆栈溢出的错误
    if (to.path !== '/login') {
      next({ path: '/login' })
    } else {
      next()
    }
  } else {
    // 1.2 如果有token
    // 如果访问的是login，就去，如果不是login，需要再看有没有用户信息
    if (to.path === '/login') {
      next()
    } else {
      // 1.2.2 再看有没有用户信息
      const username = localStorage.getItem('username')
      // 1.2.2.1 如果有用户信息
      if (username) {
        next()
      } else {
        // 1.2.2.12如果没有用户信息
        // 要通过token获取用户信息
        loginApi.getUserInfo(token).then(response => {
          const resp = response.data
          console.log(resp)
          if (resp.flag) {
            // 通过token获取到了用户信息
            // 保存用户信息
            localStorage.setItem('user', JSON.stringify(resp.data))
            // 去想去的地址
            next()
          } else {
            // 没有获取到用户信息
            next({ path: '/login' })
          }
        })
      }
    }
  }
})
